package com.darrenchan.netease03

object AbstractTest extends App{
//  val animal = new Animal()//报错
  val dog = new Dog()
  dog.m1(2)

  println(dog.m2(10))
}


/**
  * 1.抽象类不能进行实例化，不能直接使用抽象类构建对象
  */
abstract class Animal {
  //抽象字段 没有初始化的属性
  var id: Int
  //具体字段
  var name: String = "aa"

  //定义抽象方法
  def m1(x: Int): Unit

  //定义具体方法
  def m2(x: Int): Int = x + 2
}


/**
  * 1.如果是实现父类的未实现的成员时，override可以省略
  * 2.如果这个成员是父类中已经实现的成员，那么override不可以省略
  */
class Dog extends Animal {
  //这两个成员是Animal中抽象的，未实现的
  //override可以省略
  override var id: Int = 1111
  override def m1(x: Int): Unit = println("hello world")

  //override不可以省略
  override def m2(x: Int): Int = x + 3
}